package com.ruoyi.familyManagement.mapper;

import java.util.List;

import com.ruoyi.familyManagement.domain.DocFamily;
import com.ruoyi.familyManagement.domain.FamilyUser;
import com.ruoyi.familyManagement.domain.vo.FamilyUserInfo;
import com.ruoyi.familyManagement.domain.vo.FamilyVO;
import org.apache.ibatis.annotations.Param;

/**
 * 家庭表Mapper接口
 *
 * @author ruoyi
 * @date 2025-08-14
 */
public interface DocFamilyMapper {
    /**
     * 查询家庭表
     *
     * @param famliyId 家庭表主键
     * @return 家庭表
     */
    public DocFamily selectDocFamilyByFamliyId(Long famliyId);

    /**
     * 查询家庭表列表
     *
     * @param docFamily 家庭表
     * @return 家庭表集合
     */
    public List<DocFamily> selectDocFamilyList(DocFamily docFamily);

    /**
     * 新增家庭表
     *
     * @param docFamily 家庭表
     * @return 结果
     */
    public int insertDocFamily(DocFamily docFamily);

    /**
     * 修改家庭表
     *
     * @param docFamily 家庭表
     * @return 结果
     */
    public int updateDocFamily(DocFamily docFamily);

    /**
     * 删除家庭表
     *
     * @param famliyId 家庭表主键
     * @return 结果
     */
    public int deleteDocFamilyByFamliyId(Long famliyId);

    /**
     * 批量删除家庭表
     *
     * @param famliyIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteDocFamilyByFamliyIds(Long[] famliyIds);

    /**
     * 根据用户id查询用户家庭信息
     *
     * @param userId 用户id
     * @return FamilyVO
     */
    FamilyVO findFamilyByUserId(@Param("userId") Long userId);

    /**
     * 添加家庭信息
     *
     * @param familyVO 家庭信息
     */
    void insertDocFamilyVO(FamilyVO familyVO);

    /**
     * 添加家庭中间表信息
     *
     * @param familyUser 家庭中间表
     */
    void insertDocFamilyUser(FamilyUser familyUser);

    /**
     * 根据用户id查询用户家庭id
     *
     * @param userId 用户id
     * @return familyId 家庭id
     */
    Long findFamilyIdByUserId(Long userId);

    /**
     * 根据家庭id查询家庭成员信息
     *
     * @param familyId 家庭id
     * @return FamilyUserInfo 家庭成员信息
     */
    List<FamilyUserInfo> getFamilyUserInfo(Long familyId);

    /**
     * 根据用户名称获取用户id
     *
     * @param username 用户名称
     * @return userId 用户id
     */
    Long getUserIdByUsername(String username);

    /**
     * 根据家庭id获取家庭名称
     *
     * @param familyId 家庭id
     * @return familyName 家庭名称
     */
    String findFamilyNameByUserId(Long familyId);

    /**
     * 根据家庭id获取团队id
     *
     * @param familyId 家庭id
     * @return teamId 团队id
     */
    Long getTeamNameByFamilyId(Long familyId);

    void updateTeamIdByUserId(@Param("userId") Long userId,@Param("teamId") String teamId);
    /**
     * 校验家庭成员数量
     * @param userId 用户id
     * @return int
     */
    int checkFamilyUserNum(Long userId);

    /**
     * 根据用户id获取角色id
     * @param userId 用户id
     * @return roleId 角色id
     */
    Long getRoleIdByUserId(Long userId);

    /**
     * 根据用户id获取团队id
     * @param userId 用户id
     * @return teamId 团队id
     */
    Long getTeamIdByUserId(Long userId);

    /**
     * 校验是否已有家庭
     * @param userId 用户id
     * @return int
     */
    int findFamilyIdByUserId2(Long userId);

    /**
     * 根据用户id查询用户家庭信息和已签约列表信息
     * @param userId 用户id
     * @return FamilyInfoAndContractedInfo
     */
    List<FamilyInfoAndContractedInfo> findFamilyByUserIdAndContracted(Long userId);

}
